package com.lxp.common.utils;

import java.util.ArrayList;
import java.util.List;

/**
 * 分页工具类
 *
 * @author 乐乐
 */
public class PageUtils {

    /**
     * @param pageNum     当前页数
     * @param pageSize 每页得大小
     * @param list     分页的对象
     * @return
     */
    public static List<?> getListPage(int pageNum, int pageSize, List<?> list) {
        if (list == null || list.size() == 0) {
            throw new RuntimeException("分页数据不能为空!");
        }
        int totalCount = list.size();
        pageNum = pageNum - 1;
        int fromIndex = pageNum * pageSize;
        //分页不能大于总数
        if (fromIndex >= totalCount) {
            throw new RuntimeException("页数或分页大小不正确!");
        }
        int toIndex = ((pageNum + 1) * pageSize);
        if (toIndex > totalCount) {
            toIndex = totalCount;
        }
        return list.subList(fromIndex, toIndex);

    }

    /**
     * 手动分页类 2
     * @param datas
     * @param pageSize
     * @param pageNum
     * @param <T>
     * @return
     */
    public static <T> List<T> getPageSizeData(List<T> datas, int pageSize, int pageNum) {
        int startNum = (pageNum - 1) * pageSize + 1;//起始截取数据位置
        if (startNum > datas.size()) {
            return null;
        }
        List<T> res = new ArrayList<>();
        int rum = datas.size() - startNum;
        if (rum < 0) {
            return null;
        }
        if (rum == 0) {//说明正好是最后一个了
            int index = datas.size() - 1;
            res.add(datas.get(index));
            return res;
        }
        if (rum / pageSize >= 1) { //剩下的数据还够1页，返回整页的数据
            for (int i = startNum; i < startNum + pageSize; i++) {//截取从startNum开始的数据
                res.add(datas.get(i - 1));
            }
            return res;
        } else if ((rum / pageSize == 0) && rum > 0) {//不够一页，直接返回剩下数据
            for (int j = startNum; j <= datas.size(); j++) {
                res.add(datas.get(j - 1));
            }
            return res;
        } else {
            return null;
        }
    }
}
